import Vue from 'vue'
import App from './App'
import { router, RouterMount } from './router.js'
import axios from "axios"
import axiosAdapterUniapp from 'uniapp-axios-adapter'
import store from "./store"
// import VueTouch from 'vue-touch'
// Vue.use(VueTouch,{name:'v-touch'});
Vue.use(router)
Vue.config.productionTip = false
App.mpType = 'app'

Vue.prototype.$store = store

function isPromise(obj) {
    return (
        !!obj &&
        (typeof obj === "object" || typeof obj === "function") &&
        typeof obj.then === "function"
    );
}

uni.addInterceptor({
    returnValue(res) {
        if (!isPromise(res)) {
            return res;
        }
        return new Promise((resolve, reject) => {
            res.then((res) => {
                if (res[0]) {
                    reject(res[0]);
                } else {
                    resolve(res[1]);
                }
            });
        });
    },
});

const app = new Vue({
    store,
    ...App
})


//axios初始化
const request = axios.create({
    // baseURL: "https://example.com",
    timeout: 10000,
    adapter: axiosAdapterUniapp, // 指定适配器
});
Vue.prototype.$http2 = request;


// app.$mount()

//v1.3.5起 H5端 你应该去除原有的app.$mount();使用路由自带的渲染方式
// #ifdef H5
RouterMount(app, '#app');
// #endif

// #ifndef H5
app.$mount(); //为了兼容小程序及app端必须这样写才有效果
// #endif

//从这一行开始到最后，都是uni.request拦截器的试过的版本。写了好几天了，终于写出来了/(ToT)/~~




//router路由守卫
// router.beforeEach((to, from, next) => {
//     if (to.path == "/pages/login/login") {
//         next();
//         // console.log("跳转login，无需access");
//     } else {
//         let verifyData = uni.request({
//             url: "https://tomato.daoxuan.cc/api/token/verify/",
//             method: "POST",
//             data: {
//                 "token": uni.getStorageSync('login').access
//             }
//         });
//         verifyData.then((res) => {
//             if (res.statusCode != 200) {
//                 console.log("access无效");
//                 let refreshData = uni.request({
//                     url: "https://tomato.daoxuan.cc/api/refresh/",
//                     method: "POST",
//                     data: {
//                         "refresh": uni.getStorageSync('login').refresh
//                     }
//                 });
//                 refreshData.then((rres) => {
//                     if (rres.statusCode != 200) {
//                         console.log("refresh无效");
//                         next("/pages/login/login")
//                     } else {
//                         uni.setStorageSync("login", {
//                             "refresh": uni.getStorageSync('login').refresh,
//                             "access": rres.data.access
//                         })
//                         // console.log("refresh有效", rres.data);
//                         next()
//                     }
//                 })
//             } else {
//                 // console.log("access有效");
//                 // console.log(res);
//                 next()
//             }
//         }).catch((err) => {
//             uni.showToast({
//                 title: err,
//                 icon: 'success',
//                 mask: true
//             })
//         })
//     }

// })


// uni.addInterceptor('request', {
//     async invoke(args) {
//         if (args.url != "https://tomato.daoxuan.cc/api/token/verify/" && args.url != "https://tomato.daoxuan.cc/api/refresh/" && args.url != "https://tomato.daoxuan.cc/pages/login/login") {
//             try {
//                 console.log("try");
//                 const verifyRes = await uni.request({
//                     url: "https://tomato.daoxuan.cc/api/token/verify/",
//                     method: "POST",
//                     data: {
//                         "token": uni.getStorageSync('login').access
//                     }
//                 });
//                 console.log(verifyRes);
//                 if (verifyRes.statusCode != 200) {
//                     console.log("拦截器access无效");

//                     const refreshRes = await uni.request({
//                         url: "https://tomato.daoxuan.cc/api/refresh/",
//                         method: "POST",
//                         data: {
//                             "refresh": uni.getStorageSync('login').refresh
//                         }
//                     });

//                     if (refreshRes.statusCode != 200) {
//                         console.log("拦截器refresh无效");
//                         uni.reLaunch({ url: '/pages/login/login' })
//                         return false;
//                     } else {
//                         uni.setStorageSync("login", {
//                             "refresh": uni.getStorageSync('login').refresh,
//                             "access": refreshRes.data.access
//                         })
//                         console.log("拦截器refresh有效", refreshRes.data);
//                         args.header.Authorization = "Bearer " + uni.getStorageSync('login').access
//                     }

//                 } else {
//                     console.log("拦截器access有效");
//                     args.header.Authorization = "Bearer " + uni.getStorageSync('login').access
//                 }
//             } catch (err) {
//                 uni.showToast({
//                     title: err,
//                     icon: 'success',
//                     mask: true
//                 })
//             }
//         }
//         return true
//     }
// });
// uni.addInterceptor('request', {
//     async invoke(args) {
//         if (args.url != "https://tomato.daoxuan.cc/api/token/verify/" && args.url != "https://tomato.daoxuan.cc/api/refresh/" && args.url != "pages/login/login") {
//             async function aaa() {
//                 let a = await uni.request({
//                     url: "https://tomato.daoxuan.cc/api/token/verify/",
//                     method: "POST",
//                     data: { "token": uni.getStorageSync('login').access }
//                 })
//                 console.log("aaa",a);
//             }
//             await aaa()
//             console.log("aaa after");
//             return args
//         }

//     }
// })

// uni.addInterceptor('request', {
//     invoke(args) {
//         return new Promise(async (resolve, reject) => {
//             try {
//                 if (args.url != "https://tomato.daoxuan.cc/api/token/verify/" && args.url != "https://tomato.daoxuan.cc/api/refresh/" && args.url != "pages/login/login") {
//                     let response = await uni.request({
//                         url: "https://tomato.daoxuan.cc/api/token/verify/",
//                         method: "POST",
//                         data: { "token": uni.getStorageSync('login').access }
//                     })
//                     console.log("response", response);
//                 }
//                 resolve(args);
//             } catch (error) {
//                 reject(error);
//             }
//         });
//     }
// });

// uni.addInterceptor('request', {
//     invoke(args) {
//         if (args.url != "https://tomato.daoxuan.cc/api/token/verify/" && args.url != "https://tomato.daoxuan.cc/api/refresh/" && args.url != "pages/login/login") {
//             uni.request({
//                 url: "https://tomato.daoxuan.cc/api/token/verify/",
//                 method: "POST",
//                 data: { "token": uni.getStorageSync('login').access }
//             }).then((res) => {
//                 if (res.statusCode != 200) {
//                     console.log("拦截器access无效");
//                     uni.request({
//                         url: "https://tomato.daoxuan.cc/api/refresh/",
//                         method: "POST",
//                         data: {
//                             "refresh": uni.getStorageSync('login').refresh
//                         }
//                     }).then((rres) => {
//                         if (rres.statusCode != 200) {
//                             // console.log("refresh无效");
//                             console.log("拦截器refresh无效");
//                             uni.reLaunch({ url: '/pages/login/login' })
//                             return false;
//                         } else {
//                             uni.setStorageSync("login", {
//                                 "refresh": uni.getStorageSync('login').refresh,
//                                 "access": rres.data.access
//                             })
//                             console.log("拦截器refresh有效", rres.data);
//                             args.header.Authorization = "Bearer " + uni.getStorageSync('login').access
//                         }
//                     })

//                 } else {
//                     // access有效
//                     console.log("拦截器access有效");
//                     args.header.Authorization = "Bearer " + uni.getStorageSync('login').access
//                 }
//             }).catch((err) => {
//                 uni.showToast({
//                     title: err,
//                     icon: 'success',
//                     mask: true
//                 })
//             })
//         }
//     }
// })
// let isRefresh = false
//我测，终于能用了
uni.addInterceptor('request', {
    invoke(args) {
        return new Promise(async (resolve, reject) => {
            try {
                if (args.url != "https://tomato.daoxuan.cc/login/" && args.url != "https://tomato.daoxuan.cc/api/token/verify/" && args.url != "https://tomato.daoxuan.cc/api/refresh/" && args.url != "pages/login/login") {
                    console.log(args.url);
                    // if (uni.getStorageSync("login") == "") {
                    //     var pages = getCurrentPages();
                    //     var page = pages[pages.length - 1];
                    //     if (page != "pages/login/login")
                    //         uni.reLaunch({ url: '/pages/login/login' })
                    // }
                    let response = await uni.request({
                        url: "https://tomato.daoxuan.cc/api/token/verify/",
                        header: {},
                        method: "POST",
                        data: { "token": uni.getStorageSync('login').access }
                    })

                    if (response.statusCode != 200) {
                        // console.log("access",uni.getStorageSync('login').access);
                        console.log("拦截器access无效");
                        let rres = await uni.request({
                            url: "https://tomato.daoxuan.cc/api/refresh/",
                            method: "POST",
                            data: {
                                "refresh": uni.getStorageSync('login').refresh
                            }
                        })
                        if (rres.statusCode != 200) {
                            console.log("拦截器refresh无效");
                            var pages = getCurrentPages();
                            var page = pages[pages.length - 1];
                            if (page != "pages/login/login")
                                uni.reLaunch({ url: '/pages/login/login' })
                            // uni.reLaunch({ url: '/pages/login/login' })
                            reject(new Error("refresh无效"));
                            return;
                        } else {
                            uni.setStorageSync("login", {
                                "refresh": uni.getStorageSync('login').refresh,
                                "access": rres.data.access
                            })
                            console.log("拦截器refresh有效", rres.data);
                            args.header.Authorization = "Bearer " + uni.getStorageSync('login').access
                        }
                    } else {
                        console.log("拦截器access有效");
                        args.header.Authorization = "Bearer " + uni.getStorageSync('login').access
                    }
                }
                // isRefresh = false
                resolve(args);
            } catch (error) {
                reject(error);
            }
        });
    }
});

